/**
 * 1 页面加载的时候
 *   1 从缓存中获取购物车数据 渲染到页面中
 *      这些数据 checked = true
 * 2 微信支付
 *   1 哪些人 哪些账号 可以实现微信支付
 *     1 企业账号 
 *     2 企业账号的小程序后台中 必须 给开发者 添加上白名单
 *       1 一个appid 可以绑定多个开发者
 *       2 这些开发者就可以公用这个appid 和 它的开发权限
 * 3 支付按钮
 *   1 先判断缓存中有没有token
 *   2 没有 跳转到授权页面 进行获取token
 *   3 有token 正常流程
 *   4 创建订单 获取订单编号
 *   5 已经完成了微信支付
 *   6 手动删除缓存中 已经被选中的商品
 *   7 删除后的购物车数据 填充回缓存
 *   8 再跳转页面
 */
import { getSetting, chooseAddress, openSetting, showModal, showToast, requestPayment } from "../../utils/asyncWx.js";
import { request } from "../../request/index.js";
Page({
    data: {
        address: {},
        cart: [],
        totalPrice: 0,
        totalNum: 0,
        userInfo: {},
    },

    onShow() {
        // 1 获取缓存中的用户信息
        const userInfo = wx.getStorageSync("userInfo");
        // 1 获取缓存中的收货地址信息
        const address = wx.getStorageSync("address");
        // 1 获取缓存中的购物车数据
        let cart = wx.getStorageSync("cart") || [];
        // 过滤后的购物车数组
        cart = cart.filter(v => v.checked);

        // 1 总价格 总数量
        let totalPrice = 0;
        let totalNum = 0;
        cart.forEach(v => {
            totalPrice += v.num * v.price;
            totalNum += v.num;
        })

        this.setData({
            cart,
            totalPrice,
            totalNum,
            address,
            userInfo
        })
    },

    // 点击支付
    async handleOrderPay() {
        // 1 判断用户状态
        const index = await request({ url: "/user/getByOpenId", data: { open_id: this.data.userInfo.open_id }, method: "GET" });
        if (index.data.data.length === 1 || index.data.data.length === "") {
            if (index.data.data[0].state === 1) {
                showToast({ title: "您已被封禁，详情请联系客服", icon: "none" });
                wx.removeStorageSync("userInfo");
                wx.removeStorageSync("cart");
                wx.removeStorageSync("address");
                wx.removeStorageSync("expiration");
                this.setData({
                    userInfo: []
                })
                setTimeout(function() {
                    wx.switchTab({
                        url: '/pages/cart/index'
                    });
                }, 2000);
                return;
            }
            if (index.data.data[0].state === 2) {
                showToast({ title: "您已被封禁，详情请联系客服", icon: "none" });
                return;
            }
        }
        try {
            // 2 判断缓存中有没有token
            // const token = wx.getStorageSync("token");
            // if (!token) {
            //     wx.navigateTo({
            //         url: '/pages/auth/index'
            //     });
            //     return;
            // }
            // 3 创建订单 
            // 3.1 准备 请求头参数
            // const header = { Authorization: token };
            // 3.2 准备请求体参数
            const order_price = this.data.totalPrice;
            const cart = this.data.cart;
            let ordertable_goods = [];
            cart.forEach(v => ordertable_goods.push({
                amount: v.num,
                goods: { goodsId: v.goodsId }
            }))

            // 4 发送请求 创建订单 获取订单编号
            // const { order_number } = await request({ url: "/my/orders/create", data: orderParams, method: "POST" });
            // 5 发送 预支付接口
            // const { pay } = await request({ url: "/my/orders/req_unifiedorder", method: "POST", data: { order_number } });

            // 6 发起微信支付
            // await requestPayment(pay);

            // 7 查询后台 订单状态
            // const res = await request({ url: "/my/orders/chkOrder", method: "POST", data: { order_number } });
            // console.log(res);

            // 手动删除缓存中 已经支付的商品
            let newCart = wx.getStorageSync("cart");
            newCart = newCart.filter(v => !v.checked);
            wx.setStorageSync("cart", newCart);

            wx.showModal({
                title: '支付',
                content: '',
                showCancel: true,
                cancelText: '取消支付',
                cancelColor: '#000000',
                confirmText: '确认支付',
                confirmColor: '#3CC51F',
                success: (res) => {
                    if (res.confirm) {
                        // 4 发送请求 创建订单
                        const orderParams = {
                            open_id: this.data.userInfo.open_id,
                            total_price: order_price,
                            ordertable_goods,
                            state: 1
                        };
                        request({ url: "/order/modifyOrdertable", data: orderParams, method: "POST" });
                        showToast({ title: "支付成功" });
                        // 8 支付成功 跳转到订单页面
                        setTimeout(() => {
                            wx.redirectTo({
                                url: '/pages/order/index?type=1',
                            });
                        }, 1000);

                    } else if (res.cancel) {
                        const orderParams = {
                            open_id: this.data.userInfo.open_id,
                            total_price: order_price,
                            ordertable_goods,
                            state: 0
                        };
                        request({ url: "/order/modifyOrdertable", data: orderParams, method: "POST" });
                        showToast({ title: "取消支付" });
                        // 8 取消支付 跳转到订单页面
                        setTimeout(() => {
                            wx.redirectTo({
                                url: '/pages/order/index?type=1',
                            });
                        }, 1000);
                    }
                },
                fail: () => {}
            });

        } catch (error) {
            showToast({ title: "网络连接失败" });
            console.error(error);
        }
    },

    // 点击 收获地址
    async handleChooseAddress() {
        try {
            // 1 获取 权限状态
            const res1 = await getSetting();
            const scopeAddress = res1.authSetting["scope.address"];
            // 2 判断 权限状态 '现在无需判断'
            if (scopeAddress === false) {
                // 3 诱导用户打开授权页面
                await openSetting();
            }
            // 4 调用获取收获地址的 api
            const address = await chooseAddress();

            // 5 存入到缓存中
            wx.setStorageSync("address", address);
            // wx.navigateBack({
            //     delta: 1
            // });
        } catch (error) {
            console.error(error);
        }

    },


})